class A:
    def a(self):
        print("a被调用")

    def b(self):
        print("b被调用")

    def c(self):
        print("c被调用")


x = A()
y = A()
# 给对象添加一个实例方法
# setattr(x, "e", print)  # x对象添加e方法，调用print功能
# x.e("e被调用")
# setattr(x, "f", input)
# num = x.f("请输入你的密码：")
# print(num)

# 对对象覆盖一个实例方法
# x.b()
# setattr(x, "b", print)  # 覆盖类似于添加已有的名字和方法名相同
# x.b("这是通过反射覆盖之后的b方法")

# 删除对象方法
# x.b()
# print("通过反射删除之后")
# delattr(x, "b")
# x.b()

# 通过反射判断对象是否有指定方法
# 通过使用内建函数：hasattr()
# print(hasattr(x, "b"))

# 通过反射读取方法
# f = getattr(x, "a")  # 通过反射将x对象的a方法赋值给f
# f()  # f()
#
# # 调用x对象的所有方法
# for i in ["a", "b", "c"]:
#     f = getattr(x, i)
#     f()

# pip install selenium
# pip list
